perm filename CREATE.SAI[4,KMC] blob
sn#180016 filedate 1975-10-04 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 DUP_SP finds duplicates (and other simple errors) in SPATS.INT
C00007 00003 PROC DUP_CP
C00009 ENDMK
C⊗;
COMMENT DUP_SP finds duplicates (and other simple errors) in SPATS.INT
and write SPATS.NEW, NEGATE.NEW and FAMLY.NEW ;
BEGIN
REQUIRE "IODEFS.SAI[SEC,RCP]" SOURCE_FILE;
PROC DUP_SP;
BEGIN
INTEGER OUCH3, OUCH4, TYPES;
STRING LINE, PAT;
SAFE STRING ARRAY NUMS, PARTS, NAME[0:3];
FILIN("SPATS.INT[PAR,RCP]", INCH1);
FILOUT("SPATS.NEW[PAR,RCP]", OUCH1);
FILOUT("SPATS.ERR[PAR,RCP]", OUCH2);
FILOUT("NEGATE.NEW[PAR,RCP]", OUCH3);
FILOUT("FAMLY.NEW[PAR,RCP]", OUCH4);
BREAK_LINE;
BREAK_LISP;
NAME[0] ← "PLAIN";
NAME[1] ← "NEGATE";
NAME[2] ← "FAMILY";
NAME[3] ← "NEGFAM";
PAT ← NULL;
FOR TYPES ← 0 TIL 3 DO
BEGIN
NUMS[TYPES] ← NULL;
PARTS[TYPES] ← NULL;
END;
LINE ← IN_LINE;
WHILE ¬EOF DO
BEGIN "Loop"
STRING PAT2;
INTEGER TYPE;
STRING ARRAY LIST0[0:10];
IF ¬LINE THEN
BEGIN
LINE ← IN_LINE;
CONTINUE "Loop";
END;
DISSECT(LINE, LIST0, TRUE);
PAT2 ← LIST0[1];
TYPE ← (IF LIST0[2] = "T" THEN 1 ELSE 0) + (IF LIST0[3] = "T" THEN 2 ELSE 0);
IF EQU(PAT2, PAT) THEN
BEGIN "Another"
IF ¬NUMS[TYPE] THEN
BEGIN
NUMS[TYPE] ← LIST0[5];
PARTS[TYPE] ← LIST0[4];
END
ELSE IF LIST0[4] = PARTS[TYPE] THEN
NUMS[TYPE] ← NUMS[TYPE] ∂ LIST0[5]
ELSE IF PARTS[TYPE] = "T" THEN
BEGIN
NUMS[TYPE] ← LIST0[5];
PARTS[TYPE] ← "NIL";
END;
END "Another"
ELSE BEGIN "Different"
FOR TYPES ← 0 TIL 3 DO
IF NUMS[TYPES] THEN
BEGIN
IF TYPES = 0 THEN OUT_PAIR(OUCH1, PAT, NUMS[0][1 TO 5])
ELSE IF TYPES = 1 THEN
IF NUMS[0] THEN OUT_PAIR(OUCH3, NUMS[0][1 TO 5], NUMS[1][1 TO 5])
ELSE OUT_PAIR(OUCH2, "Need plain for", PAT ∂ NAME[1] ∂ NUMS[1])
ELSE IF TYPES = 2 THEN
IF NUMS[0] THEN OUT_PAIR(OUCH4, NUMS[0][1 TO 5], NUMS[2][1 TO 5])
ELSE OUT_PAIR(OUCH2, "Need plain for", PAT ∂ NAME[2] ∂ NUMS[2])
ELSE IF NUMS[1] THEN OUT_PAIR(OUCH4, NUMS[1][1 TO 5], NUMS[3][1 TO 5])
ELSE OUT_PAIR(OUCH2, "Need negative for", PAT ∂ NAME[3] ∂ NUMS[3]);
IF LENGTH(NUMS[TYPES]) > 5 THEN
OUT_PAIR(OUCH2, IF PARTS[TYPES] = "T" THEN "Pick one" ELSE "Too many",
PAT ∂ NAME[TYPES] ∂ NUMS[TYPES]);
END;
FOR TYPES ← 0 TIL 3 DO
BEGIN
NUMS[TYPES] ← NULL;
PARTS[TYPES] ← NULL;
END;
PAT ← PAT2;
NUMS[TYPE] ← LIST0[5];
PARTS[TYPE] ← LIST0[4];
END "Different";
LINE ← IN_LINE;
END "Loop";
FOR TYPES ← 0 TIL 3 DO
IF NUMS[TYPES] THEN
BEGIN
IF TYPES = 0 THEN OUT_PAIR(OUCH1, PAT, NUMS[0][1 TO 5])
ELSE IF TYPES = 1 THEN
IF NUMS[0] THEN OUT_PAIR(OUCH3, NUMS[0][1 TO 5], NUMS[1][1 TO 5])
ELSE OUT_PAIR(OUCH2, "Need plain for", PAT ∂ NAME[1] ∂ NUMS[1])
ELSE IF TYPES = 2 THEN
IF NUMS[0] THEN OUT_PAIR(OUCH4, NUMS[0][1 TO 5], NUMS[2][1 TO 5])
ELSE OUT_PAIR(OUCH2, "Need plain for", PAT ∂ NAME[2] ∂ NUMS[2])
ELSE IF NUMS[1] THEN OUT_PAIR(OUCH4, NUMS[1][1 TO 5], NUMS[3][1 TO 5])
ELSE OUT_PAIR(OUCH2, "Need negative for", PAT ∂ NAME[3] ∂ NUMS[3]);
IF LENGTH(NUMS[TYPES]) > 5 THEN
OUT_PAIR(OUCH2, IF PARTS[TYPES] = "T" THEN "Pick one" ELSE "Too many",
PAT ∂ NAME[TYPES] ∂ NUMS[TYPES]);
END;
RELEASE(INCH1);
RELEASE(OUCH1);
RELEASE(OUCH2);
RELEASE(OUCH3);
RELEASE(OUCH4);
END;
PROC DUP_CP;
BEGIN
STRING THIS, NEXT;
STRING ARRAY LIST1, LIST2[0:10];
FILIN("CPATS.INT[PAR,RCP]", INCH1);
FILOUT("CPATS.NEW[PAR,RCP]", OUCH1);
FILOUT("CPATS.ERR[PAR,RCP]", OUCH2);
BREAK_LINE;
BREAK_LISP;
THIS ← IN_LINE;
DISSECT(THIS, LIST1, TRUE);
NEXT ← IN_LINE;
WHILE ¬EOF DO
BEGIN
DISSECT(NEXT, LIST2, TRUE);
IF LENGTH(LIST1[1]) ≤ 7 THEN
BEGIN
IF ¬EQU(LIST1[1][2 TO 6],LIST1[2]) THEN OUT_PAIR(OUCH2, "Error", THIS);
END
ELSE IF EQU(LIST1[1], LIST2[1]) THEN
OUT_PAIR(OUCH2, "Too many", LIST1[1] ∂ LIST1[2] ∂ LIST2[2])
ELSE OUT_LINE(THIS);
THIS ← NEXT;
FOR I ← 0 TIL LIST2[0] DO LIST1[I] ← LIST2[I];
NEXT ← IN_LINE;
END;
IF LENGTH(LIST1[1]) = 7 THEN
BEGIN
IF ¬EQU(LIST1[1][2 TO 6],LIST1[2]) THEN OUT_PAIR(OUCH2, "Error", THIS);
END
ELSE OUT_LINE(THIS);
RELEASE(INCH1);
RELEASE(OUCH1);
RELEASE(OUCH2);
END;
IF GET_A_STRING("dup_Sp, dup_Cp") = "S" THEN DUP_SP ELSE DUP_CP;
END